Ansible একটি ওপেন সোর্স অটোমেশন টুল যা আইটি টাস্ক যেমন কনফিগারেশন ম্যানেজমেন্ট, অ্যাপ্লিকেশন ডিপ্লয়মেন্ট, এবং সার্ভার অরকেসট্রেশন সহজে এবং দ্রুততার সাথে সম্পন্ন করতে ব্যবহৃত হয়। Playbook হলো Ansible-এর একটি মূল ফিচার, যা একটি YAML ফাইল হিসেবে লেখা হয় এবং এতে কীভাবে একটি নির্দিষ্ট কাজ সম্পাদন করতে হবে, তা ডিফাইন করা থাকে। Playbook মূলত এক বা একাধিক টাস্কের (tasks) একটি সংগ্রহ যা ধাপে ধাপে চলে।
Playbook এর মূল ধারণা
Playbook হলো Ansible এর এক ধরনের স্ক্রিপ্ট, যা বিভিন্ন মেশিন বা সার্ভারে নির্দিষ্ট কাজ করতে ব্যবহৃত হয়। একটি Playbook-এ আপনি একাধিক প্লে (play) ডিফাইন করতে পারেন। প্রত্যেকটি প্লে একটি নির্দিষ্ট সেট অফ হোস্টের উপর একটি নির্দিষ্ট সেট অফ টাস্ক সম্পাদন করে।
Playbook এর প্রধান উপাদানসমূহ
১. Play: একটি Play হল কীভাবে একটি নির্দিষ্ট হোস্ট গ্রুপে নির্দিষ্ট কাজগুলো সম্পাদিত হবে, তার নির্দেশিকা। এক বা একাধিক প্লে একটি Playbook এ থাকতে পারে। ২. Hosts: কোন হোস্ট বা হোস্ট গ্রুপে প্লে চলবে তা নির্দেশ করে। ৩. Tasks: Task হলো সেই কাজ বা কমান্ড যা নির্দিষ্ট হোস্টে চলবে। একটি Task সাধারণত একটি মডিউল ব্যবহার করে সম্পাদিত হয়। ৪. Variables: Variables প্লেবুকে ডায়নামিক ডেটা প্রদান করতে ব্যবহৃত হয়। ৫. Handlers: Handlers হলো সেই ধরনের টাস্ক যা শুধু তখনই চলে যখন কোনো নির্দিষ্ট কন্ডিশন পূরণ হয় (যেমন টাস্ক থেকে কোনো পরিবর্তন আসে)। ৬. Roles: Roles হলো Playbook কে মডুলারাইজ ও পুনর্ব্যবহারযোগ্য করার উপায়।
একটি সাধারণ Playbook এর উদাহরণ
---
- name: Install and start Apache
hosts: webservers
become: yes
tasks:
- name: Install Apache
apt:
name: apache2
state: present
- name: Start Apache service
service:
name: apache2
state: started
এই Playbook টি কী করছে:
- name: প্লে বা টাস্কের নাম দেয়া হয়েছে যাতে এটি বোঝা যায়।
- hosts: এখানে বলা হয়েছে যে "webservers" হোস্ট গ্রুপে এই প্লে চলবে।
- become: এটিতে yes দেয়া হয়েছে যাতে রুট বা সুপারইউজার হিসেবে টাস্কগুলো সম্পন্ন হয়।
- tasks: এটি একটি লিস্ট, যাতে প্রতিটি টাস্ক ডিফাইন করা হয়।
- প্রথম টাস্কে
aptমডিউল ব্যবহার করে "apache2" প্যাকেজ ইনস্টল করা হয়েছে। - দ্বিতীয় টাস্কে
serviceমডিউল ব্যবহার করে "apache2" সার্ভিস স্টার্ট করা হয়েছে।
- প্রথম টাস্কে
কিছু গুরুত্বপূর্ণ পয়েন্ট
- YAML ফরম্যাট: Playbook YAML ফরম্যাটে লেখা হয়। এটি অত্যন্ত সহজ এবং রিডেবল, কিন্তু ইনডেন্টেশন মেনে চলা খুব গুরুত্বপূর্ণ।
- Idempotency: Ansible টাস্কগুলো ইডেম্পোটেন্ট হয়, মানে একই টাস্ক বারবার চালালেও তা একই ফলাফল প্রদান করবে যদি টার্গেট সিস্টেমে কোনও পরিবর্তন না থাকে।
- Modules: Ansible এ প্রচুর বিল্ট-ইন মডিউল রয়েছে যেমন
apt,yum,service,fileইত্যাদি, যা বিভিন্ন ধরণের কাজ সম্পাদন করতে সাহায্য করে।
এগুলো হলো Ansible Playbook এর কিছু বেসিক ধারণা।
Ansible এ Playbook হলো একটি YAML ফাইল, যেখানে আপনি বিভিন্ন টাস্ক বা কাজের ধাপসমূহ নির্দিষ্ট ক্রমে উল্লেখ করেন যা Ansible রান করার সময় সম্পন্ন করবে। Playbook হলো Ansible এর অটোমেশন প্রক্রিয়ার একটি গুরুত্বপূর্ণ অংশ, যা একাধিক মেশিন বা সার্ভারে নির্দিষ্ট কাজগুলি অটোমেটেড উপায়ে সম্পন্ন করতে ব্যবহার করা হয়।
Playbook কীভাবে কাজ করে?
Playbook মূলত একটি স্ক্রিপ্টের মতো, যেখানে:
- Plays নামে এক বা একাধিক সেগমেন্ট থাকে যা নির্দিষ্ট একটি বা একাধিক হোস্টে কাজ করে।
- প্রতিটি Play-এর মধ্যে এক বা একাধিক Task থাকে যা নির্দিষ্ট কাজ সম্পন্ন করে, যেমন: প্যাকেজ ইনস্টল করা, ফাইল কপি করা, সার্ভিস রিস্টার্ট করা ইত্যাদি।
- টাস্কগুলো মডিউল ব্যবহার করে রান করে, এবং মডিউলগুলো হলো প্রি-বিল্ট কমান্ড যা নির্দিষ্ট কাজ সম্পাদনের জন্য তৈরি।
Playbook কেন ব্যবহার করা হয়?
- কনফিগারেশন ম্যানেজমেন্ট: একাধিক সার্ভার বা মেশিনে কনফিগারেশন পরিবর্তন, সফটওয়্যার ইনস্টলেশন, বা অন্য কোনো সেটআপ একযোগে সহজে এবং দ্রুত সম্পন্ন করার জন্য।
- অটোমেশন: ম্যানুয়াল কাজগুলো (যেমন নতুন সার্ভারে অ্যাপ্লিকেশন ডিপ্লয় করা, সার্ভিস মেইনটেইন করা) অটোমেটেড করে সময় এবং পরিশ্রম বাঁচানো যায়।
- ইনফ্রাস্ট্রাকচার অ্যাজ কোড (IaC): Playbook এর মাধ্যমে ইনফ্রাস্ট্রাকচার কোড আকারে সংরক্ষণ করা যায়, যা পুনরায় ব্যবহারযোগ্য ও সহজে মেইনটেইনেবল।
- ইনক্রিমেন্টাল ডিপ্লয়মেন্ট: আপনি ধাপে ধাপে ডিপ্লয়মেন্ট বা কনফিগারেশন পরিবর্তন করতে পারবেন, এবং প্রত্যেক ধাপ মনিটর করতে পারবেন।
একটি সাধারণ Playbook উদাহরণ
---
- name: Install Apache Web Server
hosts: webservers
become: yes
tasks:
- name: Install Apache
apt:
name: apache2
state: present
- name: Start Apache service
service:
name: apache2
state: started
enabled: yes
এখানে, Playbook একটি "webservers" হোস্ট গ্রুপে Apache ওয়েব সার্ভার ইনস্টল করে এবং তা চালু ও সক্রিয় করে।
সংক্ষেপে
Ansible Playbook হলো একটি শক্তিশালী টুল যা সার্ভার ম্যানেজমেন্ট এবং অটোমেশনের জন্য ব্যবহৃত হয়। এটি সহজবোধ্য, পুনরায় ব্যবহারযোগ্য, এবং YAML ফরম্যাটে হওয়ার কারণে সহজে লেখা ও বুঝা যায়।
Playbook হলো একটি YAML ফাইল যা Ansible-এ বিভিন্ন কাজ করার জন্য ব্যবহার করা হয়। এটি Ansible এর মূল উপাদানগুলোর একটি, যা বিভিন্ন টাস্ক, রোল এবং মডিউল এর সমন্বয়ে তৈরি করা হয়। একটি Playbook এর গঠন বেশ সরল এবং এটি YAML সিনট্যাক্স অনুসরণ করে। নিচে একটি Playbook এর সাধারণ গঠন এবং সিনট্যাক্স নিয়ে আলোচনা করা হলো:
Playbook এর সাধারণ গঠন
---
- name: Play এর নাম (ঐচ্ছিক)
hosts: target_hosts
become: yes (root privilege প্রয়োজন হলে)
tasks:
- name: Task এর নাম (ঐচ্ছিক)
module_name:
parameter1: value1
parameter2: value2
Playbook এর উপাদানসমূহ
---:
- প্রতিটি YAML ফাইলের শুরুতে থাকে, যা নির্দেশ করে এটি একটি YAML ফাইল।
- name (ঐচ্ছিক):
- প্লে (Play) এর একটি নাম উল্লেখ করতে হয়, যা প্লে সম্পর্কে ধারণা দেয়। এটি ঐচ্ছিক, তবে এটি প্লে কে আরও বোধগম্য করে তোলে।
hosts:
- টার্গেট হোস্ট বা হোস্ট গ্রুপের নাম উল্লেখ করা হয় যেগুলোর উপর এই প্লে প্রয়োগ করা হবে।
become (ঐচ্ছিক):
yesবাnoদিয়ে উল্লেখ করা হয় প্লে রুট বা সুপার ইউজার হিসেবে চালানো হবে কি না।
tasks:
- এই অংশে টাস্কগুলো একে একে উল্লেখ করা হয়, যা প্লে চলাকালে এক্সিকিউট করা হবে।
module_name:
- টাস্কে কোন মডিউল ব্যবহার করা হবে তা উল্লেখ করা হয়, যেমন:
copy,yum,service, ইত্যাদি।
parameters:
- মডিউলের জন্য প্রয়োজনীয় প্যারামিটার ও মান দেয়া হয়।
উদাহরণ Playbook
নিচে একটি সাধারণ Playbook এর উদাহরণ দেয়া হলো, যা একটি অ্যাপাচি সার্ভার ইনস্টল এবং চালু করবে:
---
- name: Install and start Apache
hosts: webservers
become: yes
tasks:
- name: Install Apache
yum:
name: httpd
state: present
- name: Start Apache
service:
name: httpd
state: started
enabled: yes
উদাহরণটি বিশ্লেষণ:
hosts: webservers:
- প্লেটি
webserversগ্রুপের হোস্টগুলোতে প্রয়োগ হবে।
become: yes:
- রুট প্রিভিলেজ নিয়ে টাস্কগুলো এক্সিকিউট করা হবে।
tasks:
- দুটি টাস্ক আছে:
- প্রথম টাস্কটি
yumমডিউল ব্যবহার করে Apache ইনস্টল করবে। - দ্বিতীয় টাস্কটি
serviceমডিউল ব্যবহার করে Apache সার্ভিস চালু করবে এবং এটি চালু অবস্থায় রাখবে।
- প্রথম টাস্কটি
এইভাবে, Playbook ব্যবহার করে বিভিন্ন ধরণের টাস্ক বা অপারেশন অটোমেশন করা যায়। Playbook এর সিনট্যাক্স সহজ এবং এটি YAML ফরম্যাট হওয়ায় পড়া এবং লেখা সহজ।
Ansible এ টাস্ক (Task) এবং হ্যান্ডলার (Handler) দুটোই গুরুত্বপূর্ণ উপাদান, যা Playbook এ ব্যবহৃত হয় বিভিন্ন কাজ সম্পাদন করার জন্য। চলুন একে একে এই দুটি সম্পর্কে বিশদে আলোচনা করা যাক:
১. টাস্ক (Task)
টাস্ক হলো Ansible Playbook এর একটি মৌলিক উপাদান, যা নির্দিষ্ট কাজ বা অ্যাকশন সম্পাদন করে। প্রতিটি টাস্ক সাধারণত একটি মডিউল ব্যবহার করে এবং YAML ফরম্যাটে লেখা হয়। টাস্কগুলি ধারাবাহিকভাবে চলে এবং নির্দিষ্ট একটি টাস্ক সম্পন্ন হলে পরবর্তী টাস্কে চলে যায়।
একটি টাস্ক এর বৈশিষ্ট্য:
- নাম: টাস্কের নাম দেয়া থাকে যাতে সহজে বোঝা যায় এটি কী কাজ করছে। এটি সাধারণত ডিবাগিং এবং আউটপুটে ব্যবহৃত হয়।
- মডিউল: Ansible এর বিভিন্ন বিল্ট-ইন মডিউল (যেমন
apt,yum,fileইত্যাদি) ব্যবহৃত হয় টাস্কে। - Arguments: মডিউলের সাথে বিভিন্ন আরগুমেন্ট বা প্যারামিটার দেয়া যায়, যা টাস্কের কাজ নির্ধারণ করে।
টাস্কের উদাহরণ:
- name: Install Apache
apt:
name: apache2
state: present
উপরের টাস্কটি apt মডিউল ব্যবহার করে apache2 প্যাকেজ ইনস্টল করছে। state: present দিয়ে নিশ্চিত করা হচ্ছে যে প্যাকেজটি সিস্টেমে ইনস্টল করা আছে কিনা।
২. হ্যান্ডলার (Handler)
হ্যান্ডলার হলো বিশেষ ধরনের টাস্ক যা শুধু তখনই ট্রিগার হয় যখন একটি নির্দিষ্ট কন্ডিশন পূরণ হয়, অর্থাৎ যখন কোনো টাস্ক থেকে "change" ডিটেক্ট করা হয়।
- নাম: হ্যান্ডলারের জন্য একটি নাম থাকে, যাতে অন্য টাস্কগুলি এই হ্যান্ডলারকে রেফার করতে পারে।
- Trigger: একটি হ্যান্ডলার শুধুমাত্র
notifyকিওয়ার্ড ব্যবহার করে কল করা হলে রান হয়। - হ্যান্ডলারগুলো সাধারণত সার্ভিস রিস্টার্ট, ফাইল রিলোড বা কনফিগারেশন আপডেটের মতো কাজের জন্য ব্যবহৃত হয়।
হ্যান্ডলার এর উদাহরণ:
---
- name: Install and configure Apache
hosts: webservers
become: yes
tasks:
- name: Install Apache
apt:
name: apache2
state: present
notify: Restart Apache
- name: Copy Apache configuration file
copy:
src: /path/to/httpd.conf
dest: /etc/apache2/apache2.conf
notify: Restart Apache
handlers:
- name: Restart Apache
service:
name: apache2
state: restarted
ব্যাখ্যা:
- এখানে দুটি টাস্ক আছে:
- একটি টাস্ক
apache2ইনস্টল করছে। - অন্য টাস্ক
httpd.confফাইল কপি করছে।
- একটি টাস্ক
- দুইটি টাস্কই
notify: Restart Apacheব্যবহার করছে, অর্থাৎ যখনই এই টাস্কগুলোর মাধ্যমে কোনো পরিবর্তন হবে, তখন Restart Apache হ্যান্ডলারটি ট্রিগার হবে। - Restart Apache হ্যান্ডলারটি
apache2সার্ভিস রিস্টার্ট করবে, কিন্তু শুধু তখনই করবে যদি আগে কোনো পরিবর্তন ঘটে।
হ্যান্ডলার এর সুবিধা
- হ্যান্ডলার ব্যবহার করলে আপনি নিশ্চিত হতে পারেন যে কোনো সার্ভিস বা অ্যাকশন শুধুমাত্র তখনই চালু হবে যখন সত্যিই প্রয়োজন। যেমন, যদি
apache2সার্ভিস রিস্টার্ট করার দরকার না হয়, তাহলে এটি অনর্থক রিস্টার্ট হবে না। - এটি প্লেবুকের কার্যকারিতা এবং পারফরম্যান্স বাড়াতে সাহায্য করে।
সংক্ষেপে পার্থক্য:
| বৈশিষ্ট্য | টাস্ক (Task) | হ্যান্ডলার (Handler) |
|---|---|---|
| কার্যকারিতা | সরাসরি টাস্কগুলো চালায় | নির্দিষ্ট টাস্ক থেকে "change" হলে চালায় |
| কনফিগারেশন | সরাসরি মডিউল ও প্যারামিটার দিয়ে নির্ধারিত | notify এর মাধ্যমে কল করা হয় |
| কার্যকর হওয়ার সময় | প্লেবুকের টাস্ক সিকোয়েন্স অনুযায়ী | প্লেবুকের শেষে এবং "change" হলে |
এই হলো টাস্ক এবং হ্যান্ডলার এর মূল ধারণা।
Ansible এ ভ্যারিয়েবল এবং ফ্যাক্ট হলো দুটি গুরুত্বপূর্ণ উপাদান যা প্লেবুকের কার্যকারিতা ও কাস্টমাইজেশন বাড়াতে সাহায্য করে। এদের মাধ্যমে আপনি প্লেবুকে ডাইনামিক কনফিগারেশন বা তথ্য যোগ করতে পারেন।
ভ্যারিয়েবল (Variables)
Ansible এ ভ্যারিয়েবল হলো এমন কিছু মান (values) যা আপনি প্লেবুক, রোল, বা টাস্কে ব্যবহার করতে পারেন। এটি পুনঃব্যবহারযোগ্য কোড তৈরিতে সাহায্য করে এবং প্লেবুককে ডাইনামিক বা পরিবর্তনশীল করে তোলে।
ভ্যারিয়েবল ব্যবহার করার কিছু উপায়:
- প্লেবুকের মধ্যে সরাসরি
- গ্রুপ ভ্যারিয়েবল ফাইল বা হোস্ট ভ্যারিয়েবল ফাইলে
- কমান্ড লাইনে
--extra-varsদিয়ে - ফ্যাক্টস বা অন্যান্য উৎস থেকে
উদাহরণ:
---
- name: Install and configure Apache
hosts: webservers
become: yes
vars:
apache_package: apache2
apache_service: apache2
tasks:
- name: Install Apache
apt:
name: "{{ apache_package }}"
state: present
- name: Start Apache service
service:
name: "{{ apache_service }}"
state: started
enabled: yes
এখানে, apache_package এবং apache_service নামে দুটি ভ্যারিয়েবল ব্যবহার করা হয়েছে যা প্লেবুকের বিভিন্ন স্থানে একই মান (values) রেফার করে।
ফ্যাক্ট (Facts)
ফ্যাক্টস হলো Ansible এর মাধ্যমে গ্যাদার করা সিস্টেম ইনফরমেশন বা তথ্য। Ansible প্লেবুক চালানোর সময় setup মডিউল ব্যবহার করে স্বয়ংক্রিয়ভাবে হোস্ট মেশিন থেকে ফ্যাক্টস সংগ্রহ করে, যেমন: অপারেটিং সিস্টেম, মেমরি, সিপিইউ, নেটওয়ার্ক ইন্টারফেস ইত্যাদি।
ফ্যাক্টস ব্যবহার করার উদ্দেশ্য:
- হোস্টের কনফিগারেশন বা অবস্থা সম্পর্কে তথ্য জানা
- প্লেবুকে নির্দিষ্ট টাস্ক বা কনফিগারেশন কন্ডিশনাল বা ডাইনামিকভাবে চালানো
উদাহরণ:
---
- name: Display OS information
hosts: all
gather_facts: yes
tasks:
- name: Print the OS information
debug:
msg: "The operating system is {{ ansible_distribution }} and version is {{ ansible_distribution_version }}"
এখানে, ansible_distribution এবং ansible_distribution_version হলো ফ্যাক্টস, যা হোস্টের অপারেটিং সিস্টেমের নাম ও ভার্সন সম্পর্কে তথ্য প্রদান করে।
ভ্যারিয়েবল বনাম ফ্যাক্টস:
| ভ্যারিয়েবল | ফ্যাক্টস |
|---|---|
| ইউজার দ্বারা নির্ধারিত মান যা প্লেবুক বা রোল-এ ব্যবহার করা হয়। | Ansible স্বয়ংক্রিয়ভাবে হোস্ট থেকে সংগ্রহ করা তথ্য। |
| YAML ফাইলে বা কমান্ড লাইনে নির্ধারণ করা যায়। | প্লেবুক চালানোর সময় স্বয়ংক্রিয়ভাবে সংগ্রহ করা হয়। |
| সাধারণত স্থায়ী বা প্রি-ডিফাইনড মান হিসেবে থাকে। | হোস্টের কনফিগারেশন বা চলমান অবস্থার উপর নির্ভরশীল। |
সংক্ষেপে
- ভ্যারিয়েবল: এটি প্লেবুকে কাস্টম মান দেয় যা ডাইনামিক এবং পুনরায় ব্যবহারযোগ্য।
- ফ্যাক্টস: হোস্ট মেশিন থেকে স্বয়ংক্রিয়ভাবে সংগ্রহ করা তথ্য যা প্লেবুকে কন্ডিশনাল বা ডাইনামিক টাস্ক সম্পাদনে সাহায্য করে।
Read more